import http from "./http.js"

// import config from "@/config/index.js"
// const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro

class Request {

	Execute({url, data = {},method='get',header={}}) {

		let config={url,data,method,header};
		// console.log("config",config);

	    function getPromise(conf){
			return new Promise((resolve, reject) => {	
					uni.request({
					...conf,
					success: (res) => {
						resolve(Object.assign({config},res))
						//将config和res组成新的对象返回，这样可以拿到配置信息
					}
				})
			})		
		}
		
		function dispatchRequest(config){
			if(http.config.baseURL){
				config.url = http.config.baseURL + url
			}
            //添加baseURL
			return getPromise(config)
		}
		
		let chain=[dispatchRequest,undefined];

		console.log("chain:",chain);
		
		//创建执行链
		http.interceptors.request.forEach(function(interceptor){
			chain.unshift(interceptor.resolve,interceptor.reject)
            //一个是接受状态的回调，一个是拒绝状态的回调
		})

		//在执行链头部中添加请求拦截时传入的方法
		http.interceptors.response.forEach(function(interceptor){
			chain.push(interceptor.resolve,interceptor.reject)
		})

		//在执行链尾部中添加响应拦截时传入的方法
		let promise=Promise.resolve(config);

        //初始化状态就是 resolved，这里形成了promise调用链,就可以直接promise.then()了
		while(chain.length){
			promise=promise.then(chain.shift(),chain.shift())
            //返回chain中第一个元素的值，并将其删除，因为都是成对出现的resolve和reject回调
		}

		return promise
	}

}

export default Request